0. 왜 이 프로젝트가 시작되었는지? (기획 배경)
투자를 하다 보면 가장 큰 적은 결국 '내 마음'입니다. 시장이 떨어지면 무서워서 팔고 싶고, 오르면 욕심이 나서 더 사고 싶어지죠. 저는 회계 담당자로서 숫자는 거짓말을 하지 않는다는 것을 압니다. 그래서 **"내 감정을 100% 배제하고, 철저히 데이터(거시경제 지표, 주가 추세)에만 기반해 기계처럼 매매해 주는 비서가 있다면 어떨까?"**라는 생각에서 출발했습니다. 잠든 새벽에도 알아서 미국 주식을 분석하고 사고팔며, 아침에는 장부까지 깔끔하게 정리해 주는 나만의 '디지털 CFO(최고재무책임자)'를 만드는 것이 이 프로젝트의 목표였습니다.
1. 어떻게 구현하고자 했는지? (설계도)
봇을 만들기 위해 세 가지 핵심 부품을 조립했습니다.
2. 어떤 문제점이 있어왔는지? (The Quant's Dilemma)
단순히 "서버를 어떻게 켤 것인가" 같은 기술적인 문제는 부차적이었습니다. 진짜 고통스러운 고민은 **"과연 TQQQ/QQQ 스위칭 전략이 현실에서 통하는가?"**를 백테스트하며 마주한 전략적 한계들이었습니다.
3. 어떻게 극복하였는지? (The Strategy Breakthrough)
수십 번의 백테스트 로직 수정과 치열한 논의 끝에, 우리는 시장의 노이즈를 걸러낼 **4중 필터(게임의 룰)**를 확정하며 문제를 극복했습니다.
4. 그래서 최종 코드가 무엇인지?
(상단에 매니저님이 적어두신 Python 코드 전체가 바로 이 섹션에 들어갑니다. 총 300줄이 넘는 피와 땀의 결정체입니다!)
import telebot
import yfinance as yf
import pandas as pd
import numpy as np
import json
import time
import threading
import os
import requests
from dotenv import load_dotenv
import pandas_datareader.data as web
from datetime import datetime, timedelta
load_dotenv()
KIS_APPKEY = os.getenv('KIS_APPKEY')
KIS_SECRET = os.getenv('KIS_SECRET')
KIS_CANO = os.getenv('KIS_CANO')
KIS_ACNT_PRDT_CD = os.getenv('KIS_ACNT_PRDT_CD')
KIS_URL = os.getenv('KIS_URL')
BOT_TOKEN = ‘token_code'
CHAT_ID = 'chat_code'
bot = telebot.TeleBot(BOT_TOKEN)
LEDGER_FILE = 'ledger_config.json'
HISTORY_FILE = 'trade_history.csv'
EST_FEE_RATE = 0.0025
HYG_THRESHOLD = -1.0
HYG_DAYS = 3
FRED_THRESHOLD = 5.5
SWITCH_CONFIRM_DAYS = 3
def get_access_token():
def get_current_price_kis(ticker, token):
def get_kis_krw_balance(token):
def get_kis_balance(token):
def execute_order_kis(ticker, qty, price, token, side="buy"):
def auto_trade_logic(target_ticker, st):
def load_ledger():
def save_ledger(data):
def log_trade(acc_type, trade_type, ticker, qty, price, amount, fee, date_str=None):
def get_historical_price(ticker, target_date):
def get_strategy_state():
def get_account_summary():
def generate_strategy_report():
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message): bot.reply_to(message, "🤖 CFO v10.4 실전모드 (원화 예수금 완벽연동)\n/status /strategy /now", parse_mode='HTML')
@bot.message_handler(commands=['now'])
def handle_now(message):
@bot.message_handler(commands=['status'])
def handle_status(message):
@bot.message_handler(commands=['strategy'])
def handle_strategy(message):
Finance Analyst : Hyungbin
Input & Output : 매일의 기록, 확실한 ROI